Once we agreed upon the broad structure of our instant messaging system, we decided to list and prioritise the specific functionality which the system should have. Given that time was a  significant constraint on the project, we decided that scoping our requirements using the MoSCoW technique\footnote[3]{\url{http://certifications.groupsite.com/discussion/topic/show/310632} \newline (Accessed: Feb 2012)} would be beneficial. By prioritising our requirements in this way, we were able to focus on developing the minimal functionality required of our system, and then progress to implementing features which while not essential, fit within our specification. This meant that it was clear what we hoped to achieve within the constraints of the project.

Given the considerable number of existing systems, there was a range of features which were considered. We combined our experience in using these existing systems with our perception of how difficult a given feature would be to implement, we prioritised our requirements, using the MoSCoW technique, as described in the following sections.

\textbf{\textit{Must Have} Features}
 
This category includes features that we think are essential for an instant messaging system and would provide us with solid foundation to build upon. These features are:

\begin{itemize}
\item \textbf{The concept of users.} This is a means of uniquely identifying a person using the system. Each user will have a unique user name which they will use to login to the system. Other users connected to the system can then use to this to refer to them within the system. This is a must have so people can be individually identified on a long-term basis, rather than, for example, picking a new user name each time they use the system.

\item \textbf{The ability to communicate with other users via text, individual \& complete messages at a time.} This is the definition of an instant messenger. This does not include customised fonts, emoticons, etc as they are not required to function as an instant messenger. A message can contain multiple lines of text, and text will be sent when the user presses return.

\item \textbf{The ability to communicate within groups.} This is one of the basic features we want ourselves as this too, is a common feature of instant messaging systems. Users can create their own ‘channels’ which other users can join. When a message is sent in the channel, all users in the channel receive the message.

\item \textbf{The ability to communicate with another user privately.} This too, comes under the basic definition of an instant messaging system. Users will be able to communicate with each other on a one-to-one basis outside the group context.

\item \textbf{The ability to handle an arbitrary number of client connections.} This is specified in the original project proposal. The server should be able to handle an arbitrary number of client connections.

\item \textbf{A graphical user interface (GUI).} This is a requirement set out in the original project proposal, and as such is a must have feature. A GUI, in contrast to a command line interface, allows the user to interact with the system using the mouse, along with icons and menus, rather than relying upon textual commands.
\end{itemize}


\textbf{\textit{Should Have} Features}

This category includes features that are most common and widely supported features of many existing instant messaging systems. While these are features which most users would expect of an instant messaging system, they do not form a critical part of the system. These features are:

\begin{itemize}
\item \textbf{The ability to set availability.} This would allow users to select from specific states, such as away or busy, to show their availability. This would then be reflected on other users’ clients, showing if the user is available for chatting, or is idle. This is set out in the project proposal, but we do not consider it to be an essential feature of an instant messaging system, and it is therefore a should have feature.

\item \textbf{The ability to set a nickname.} Users should be able to set a nickname or alias to be associated with their account. This would then show in place of their username, allowing them to enter a friendlier and less restrictive name. This is a should have as it is a relatively trivial feature to implement, yet adds to the user experience.

\item \textbf{The ability to upload an avatar.} Users should be able to upload or select images that will used to represent them whenever they are presented in a list to other users, alongside their username or nickname. While this may pose a greater challenge to implement than other should have requirements, it was decided that its contribution to the user experience was great enough to include it in this category.

\item \textbf{The ability to set a custom font per-user.} This feature would allow each user to set their own individual font style and colour, which would be used each time they send a message. Other users would then see this same font style and colour. We've decided this is a should have as it is one of the standard features of most instant messaging systems.

\item \textbf{The ability to administrate user accounts and extra data associated with accounts.} This feature would allow users to create and modify their own user accounts on the system through some profile editor window. This is not a must have as user accounts can be hard-coded into the system for testing purposes, so the ability for users to create accounts is not essential. This includes the ability to update account information, such as the account password or nickname.

\item \textbf{A contact list associated with each user account.} This feature gives each user a contact list, persistent within the system that keeps a list of users they wish to contact. Users should be able to add and remove users from this list as they wish. Similar to the user accounts themselves, this can be hard-coded and thus is not a must have, but is still an important feature.

\item \textbf{The replacement of text-based emoticons with graphical emoticons.} This feature would replace text-based emoticons such as ``:)'' with a built-in graphical representation. This is a should have as it, too, is a standard feature of most instant messaging systems. 

\end{itemize}
\textbf{\textit{Could Have} Features}

The features in this category are also quite common features of many instant messaging system and it could be worth having them. However, they would only be implemented once higher priority requirements had been considered. As a result, the likelihood of them being implemented is low.  These features are: 

\begin{itemize}
\item \textbf{The ability to log and archive messages.} This feature would automatically keep a log of all messages sent and received for each user. This would be a local feature, given that storage on the server would be costly, in terms of both the time taken to persist every message to the database, and the storage space required. The user would be able to access these log files easily and use them as desired. This is a could have as while it is a common and useful feature, it is not an integral part of the instant messaging system. 

\item \textbf{The ability to search for users using something other than their username.} This feature would allow users to search for each other using fields such as their nickname, or email address. It could also support partial matching rather than needing the full text. This is a could have as users can still add each other by using their full username.

\item \textbf{The ability to transfer files to other users.} This feature would allow users to transfer files to each other through the system. This is a could have as there are other ways in which users can transfer files to each other easily, and while it too is a common feature  for many instant messaging systems, it is not integral.

\item \textbf{The ability to send messages to users that are currently offline.} This feature would allow users to send messages to other users that are offline. These messages would be queued by the server, and delivered the next time that the recipient logs in. This is a could have because it is not an essential feature for an instant message system.
\end{itemize}

\textbf{\textit{Would like to Have} Features}

Those are the features that, although available in many existing instant messaging systems, are somewhat beyond the scope of this project. These features would only ever be implemented if the scope or schedule constraints of the project were to change. Nevertheless, we felt that thinking about features in this category enabled us to produce a focused requirements list, and this list can contribute to further work on the project.

\begin{itemize}
\item \textbf{The ability to have voice-based communication.} This would allow users to communicate to each other using for example, a headset, rather than just text. Users would be able to ``call'' another user, similar to Skype, which the other user must accept to continue. This is a would like to have as we think it would be an interesting feature to add, but may be quite complicated.

\item \textbf{The ability to watch YouTube videos together.} This feature would allow users to click on a YouTube link in a chat window, which would cause the system play and automatically synchronise the video between each user. This is a would like to have as it is quite a complicated feature to implement, but would significantly enhance the user experience.
\end{itemize}

\textbf{\textit{Rejected} Features}

While it would be cumbersome to enumerate the various features which were discussed and subsequently rejected, we want to highlight some of these features. 

\begin{itemize}
\item \textbf{``Themes'' or ``Skins''.} While these add to the user's ability to customise the interface, they can degrade the experience by making the interface inconsistent. In addition, it is difficult to provide sufficient flexibility for this feature to be useful.

\item \textbf{Spelling or grammar checking.} Given the informal nature of the contents of most instant messaging conversations, and the frequency of abbreviations, this would be difficult to implement without degrading the user experience. In addition, this is increasingly becoming an operating system feature\footnote[4]{\url{http://docs.info.apple.com/article.html?path=Mac/10.7/en/mchlp2299.html} \newline (Accessed: Feb 2012)}, and can be implemented more consistently in this context. 

\item \textbf{Printing messages character at a time, as they are sent.} This was discussed as part of developing an understanding of what defines an instant messenger, and was used to contrast the notion that sending complete messages was essential. We think that this feature would degrade the user experience, as mistakes could not be rectified before being transmitted to the recipient. 
\end{itemize}
Again, this is not an exhaustive list of considered and rejected features -- a large number of other features were also considered, and are not included here. The main reason for rejecting features was the time constraint placed on the project.
